package cn.edu.tjpu.lxy.epr;

public class TestDriver3 {

	/*
	 * 位运算：& | ^ ~  （优先级从高到低：~ & ^ |）
	 * 所有的位运算都以补码的形式进行运算。
	 * 
	 * & ：与运算。按位与，都为1结果是1；其他结果是0
	 * | ：或运算，按位或，都为0结果是0，其他结果1 
	 * ^ : 异或运算，按位异或，1和0异或结果是1；1和1异或结果是0；0和0异或结果是0，（相异为1，相同为0）
	 * ~ ：取反运算，按位取反，1变0，0变1。
	 */
	public static void main(String[] args) {
		// 位运算
		test01();
	}

	/**
	 * 位运算
	 */
	private static void test01() {
		int iNum1 = 2;// 补：0000 0010
		int iNum2 = -2;// 补：1111 1110 
		
		int iNum3 = 3;// 补：0000 0011
		
		
		System.out.println("iNum1 & iNum3="+(iNum1 & iNum3));
		System.out.println("iNum2 & iNum3="+(iNum2 & iNum3));
		
		System.out.println("iNum1 | iNum3="+(iNum1 | iNum3));
		System.out.println("iNum2 | iNum3="+(iNum2 | iNum3));
		
		System.out.println("iNum1 ^ iNum3="+(iNum1 ^ iNum3));
		// 1111 1101  1111 1100  1000 0011 
		System.out.println("iNum2 ^ iNum3="+(iNum2 ^ iNum3));
		
		System.out.println("~iNum1="+(~iNum1));
		System.out.println("~iNum2="+(~iNum2));
		
		//测试 & 与 ^ 优先级高低
		System.out.println("iNum1 & iNum3 ^ iNum3="+(iNum1 & iNum3 ^ iNum3));
		System.out.println("iNum3 ^ iNum3 & iNum1 ="+(iNum3 ^ iNum3 & iNum1));
		System.out.println("iNum3 ^ iNum3 & iNum1 ="+((iNum3 ^ iNum3) & iNum1));
	}

}
